From: Eric Fahlgren Date: Mon, 29 Sep 2025 20:19:44 +0000 (-0700) Subject: rpc-sys: packagelist: handle ABI versions in apk world properly X-Git-Url: http://git.openwrt.org/%22http:/oss.oetiker.ch/rrdtool//%22/%22http:/oss.oetiker.ch/rrdtool/%22?a=commitdiff_plain;h=d4fa147470aab6aee4b23ef6327201c6be069ab1;p=project%2Frpcd.git rpc-sys: packagelist: handle ABI versions in apk world properly It was originally assumed that all entries in '/etc/apk/world' would have ABI-versioned package names. This turns out to be false, and apk happily adds package names with or without the ABI version suffix. This causes the output from 'ubus call rpc-sys packagelist' to exclude some packages from the user-installed package list, thus causing them to disappear when doing an ASU build. Fix it by checking both versioned and unversioned package names. Link: https://forum.openwrt.org/t/owut-openwrt-upgrade-tool/200035/744 Fixes: https://github.com/efahl/owut/issues/49 Signed-off-by: Eric Fahlgren --- diff --git a/sys.c b/sys.c index 75fae48..fd7ad3b 100644 --- a/sys.c +++ b/sys.c @@ -318,10 +318,16 @@ rpc_sys_packagelist(struct ubus_context *ctx, struct ubus_object *obj, break; default: if (is_blank(line)) { - if (pkg[0] && ver[0] && is_all_or_world(pkg, world)) { - if (abi[0]) + if (pkg[0] && ver[0]) { + /* Need to check both ABI-versioned and non-versioned pkg */ + bool keep = is_all_or_world(pkg, world); + if (abi[0]) { pkg[strlen(pkg)-strlen(abi)] = '\0'; - blobmsg_add_string(&buf, pkg, ver); + if (!keep) + keep = is_all_or_world(pkg, world); + } + if (keep) + blobmsg_add_string(&buf, pkg, ver); } abi[0] = pkg[0] = ver[0] = '\0'; }